package Learn;

public class test{
    public static void main(String[] args) {

        Animal a=new Dog();
        //多态 调用成员变量 编译左边 运行左边
        //调用成员方法 编译看左边 运行看右边
        System.out.println(a.name);

        a.show();

        //多态的优势 右边对象可以实现解耦合 便于扩展维护
        //定义方法时 父类可以接受所有子类对象 扩展性便利

        //多态弊端 不能调用子类的特有方法 因为 编译看左边 父类没有这个方法 那么运行时就没有
        //解决方法 强转

//        if(a instanceof Dog){
//        Dog d=(Dog)a;
//        d.look();
//        }
//        else if(a instanceof Cat){
//            Cat c=(Cat)a;
//        }
//        else{
//            System.out.println("wu");
//        }

if(a instanceof Dog d){
    d.look();
}else if(a instanceof Cat c){

}


    }
}

class Animal {
   String name="animal";
   public void show(){
       System.out.println("这是动物");
   }
}
class Dog extends Animal{
    String name="Dog";
    @Override
    public void show(){
        System.out.println("这是狗");
    }
    public void look(){
        System.out.println("砍价");
    }
}
class Cat extends Animal{
    String name="Cat";
    @Override
    public void show(){
        System.out.println("这是猫");
    }
}
